#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>


int main(void)
{
    void *ptr = NULL;
    pid_t pid;
    int shmid = shmget(IPC_PRIVATE, 1024, IPC_CREAT | IPC_EXCL | 0600); // 共享内存容量为1024B

    if (-1 == shmid) {
        perror("shmget()");
        return 1;
    }

    pid = fork();

    if (-1 == pid) {
        perror("fork()");
        return 1;
    }

    if (0 == pid) {
        ptr = shmat(shmid, NULL, 0); // 建立映射
        memcpy(ptr, "hello world", 12);
        shmdt(ptr); // 解除共享内存映射
        return 0;
    }

    wait(NULL);

    ptr = shmat(shmid, NULL, 0);
	puts(ptr);
	shmdt(ptr);

	shmctl(shmid, IPC_RMID, NULL); // 销毁共享内存


    return 0;
}
